/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import org.apache.log4j.Logger;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.digitalizar.beans.DictamenDetalle;
import pe.gob.pnp.factories.*;

/**
 *
 * @author Home
 */
public class DictamenDespachador {

    private static final Logger logger = Logger.getLogger(DictamenDespachador.class);

    public static List<DictamenBean> obtenerDictamen(int expediente) throws SQLException {
        DictamenBean dictamen = new DictamenBean();
        List<DictamenBean> lstDictamen = new ArrayList<DictamenBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT  D.NDICT_IDENTIFICADOR, D.CDICT_RESUELVE,";
            sql += "  D.NEXPE_IDENTIFICADOR, D.DDICT_FECHA, D.CDICT_OBSERVACIONES,";
            sql += "  cdict_referencia,cdict_instructor,cdict_folios,cdict_solicita ";
            sql += " FROM PERMA_DICTAMEN D INNER JOIN SISMA_EXPEDIENTE E";
            sql += " ON E.NEXPE_IDENTIFICADOR = D.NEXPE_IDENTIFICADOR WHERE D.NEXPE_IDENTIFICADOR =?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                dictamen = new DictamenBean();
                dictamen.setNdict_identificador(rs.getInt("NDICT_IDENTIFICADOR"));
                dictamen.setCdict_resuelve(rs.getString("CDICT_RESUELVE"));
                dictamen.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                dictamen.setDdict_fecha(rs.getDate("DDICT_FECHA"));
                dictamen.setCdict_observaciones(rs.getString("CDICT_OBSERVACIONES"));
                dictamen.setCdict_referencia(rs.getString("cdict_referencia"));
                dictamen.setCdict_instructor(rs.getString("cdict_instructor"));
                dictamen.setCdict_folios(rs.getString("cdict_folios"));
                dictamen.setCdict_solicita(rs.getString("cdict_solicita"));
                lstDictamen.add(dictamen);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstDictamen;
    }

      public static DictamenBean obtenerDictamenPorId(int id_dictamen) throws SQLException {
        DictamenBean dictamen = new DictamenBean();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = " select D.*, P.NPEPO_IDENTIFICADOR from PERMA_DICTAMEN D  ";
            sql = sql + " inner join sisma_expediente e on d.nexpe_identificador = e.nexpe_identificador ";
            sql = sql + " inner join  PERMA_PERSONALPOLICIAL P on p.npepo_identificador = e.npepo_identificador ";
            sql = sql + " where ndict_identificador = ?";
            logger.debug( sql );
            logger.debug( "dictamenId  = " + id_dictamen );
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, id_dictamen);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                dictamen = new DictamenBean();
                dictamen.setNdict_identificador(rs.getInt("NDICT_IDENTIFICADOR"));
                dictamen.setCdict_resuelve(rs.getString("CDICT_RESUELVE"));
                dictamen.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                dictamen.setDdict_fecha(rs.getDate("DDICT_FECHA"));
                dictamen.setCdict_observaciones(rs.getString("CDICT_OBSERVACIONES"));
                dictamen.setCdict_referencia(rs.getString("cdict_referencia"));
                dictamen.setCdict_instructor(rs.getString("cdict_instructor"));
                dictamen.setCdict_folios(rs.getString("cdict_folios"));
                logger.debug( "Folios = " + rs.getString("cdict_folios"));
                dictamen.setCdict_solicita(rs.getString("cdict_solicita"));
                dictamen.setIdPolicial( rs.getInt("NPEPO_IDENTIFICADOR") );
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return dictamen;
    }

    public static boolean ingresarDictamen(DictamenBean dictamen) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = " INSERT INTO PERMA_DICTAMEN (NDICT_IDENTIFICADOR, ";
            sql += " CDICT_RESUELVE,  NEXPE_IDENTIFICADOR, DDICT_FECHA,CDICT_OBSERVACIONES,cdict_referencia,cdict_instructor,cdict_folios,cdict_solicita) ";
            sql += " VALUES (SEQ_DICTAMEN.NEXTVAL,?,?,?,?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, dictamen.getCdict_resuelve());
            ps.setInt(2,dictamen.getNexpe_identificador());
            ps.setDate(3,dictamen.getDdict_fecha());
            ps.setString(4,dictamen.getCdict_observaciones());
            ps.setString(5,dictamen.getCdict_referencia());
            ps.setString(6,dictamen.getCdict_instructor());
            ps.setString(7,dictamen.getCdict_folios());
            ps.setString(8,dictamen.getCdict_solicita());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static String ultimoDictamen() throws SQLException {
        String res = "";
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = " SELECT SEQ_DICTAMEN.CURRVAL as val from dual ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                res = ""+ rs.getInt("val");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return res;
    }

    public static boolean actualizarDictamen(DictamenBean dictamen) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql = new StringBuilder();
            sql.append(" UPDATE PERMA_DICTAMEN SET CDICT_RESUELVE=?,");
            sql.append(" DDICT_FECHA=?,CDICT_OBSERVACIONES=?,");
            sql.append(" cdict_referencia=?,");
            sql.append(" cdict_instructor=?,");
            sql.append(" cdict_folios=?,");
            sql.append(" cdict_solicita=?");
            sql.append(" WHERE NDICT_IDENTIFICADOR=?");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setString(1, dictamen.getCdict_resuelve());
            ps.setDate(2,dictamen.getDdict_fecha());
            ps.setString(3,dictamen.getCdict_observaciones());
            ps.setString(4,dictamen.getCdict_referencia());
            ps.setString(5,dictamen.getCdict_instructor());
            ps.setString(6,dictamen.getCdict_folios());
            ps.setString(7,dictamen.getCdict_solicita());
            ps.setInt(8,dictamen.getNdict_identificador());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static List<DictamenDetalle> obtenerDetalleDictamen(int ndict_identificador, int tipo) throws SQLException {
        List<DictamenDetalle> lista = new ArrayList<DictamenDetalle>();
        DictamenDetalle dictamen = null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            StringBuilder sql =  new StringBuilder();
            sql.append(" select * from SISDE_DICTAMENDET ");
            sql.append(" where ndict_identificador = ? and NDEDICT_TIPO = ?");
            sql.append(" order by NDEDICT_IDENTIFICADOR asc ");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setInt(1, ndict_identificador);
            ps.setInt(2, tipo);
            logger.debug(sql.toString() + " ndict_identificador= " + ndict_identificador + "; tipo=" +tipo );
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                dictamen = new DictamenDetalle();
                dictamen.setNdedict_identificador(rs.getInt("NDEDICT_IDENTIFICADOR"));
                dictamen.setNdict_identificador(rs.getInt("NDICT_IDENTIFICADOR"));
                dictamen.setCdedict_detalle( rs.getString("CDEDICT_DETALLE"));
                dictamen.setNdedict_tipo(rs.getInt("Ndedict_tipo"));
                lista.add(dictamen);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lista;
    }

    public static boolean eliminarDictamenContenido(Integer dedict_identificador){
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
                String sql = "delete from SISDE_DICTAMENDET  ";
                sql += " where  NDEDICT_IDENTIFICADOR = ? ";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setInt(1, dedict_identificador );
                ps.executeUpdate();
                resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean ingresarDictamenContenido(DictamenDetalle dictamen) throws SQLException {
        boolean resultado = false;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            System.out.println("Ndedict_identificador=" + dictamen.getNdedict_identificador());
            if( dictamen.getNdedict_identificador() == 0 || dictamen.getNdedict_identificador() == -1 ){
                System.out.println("INSERTADO DICAMEN DTALLE");
                String sql = " INSERT INTO SISDE_DICTAMENDET (NDEDICT_IDENTIFICADOR, ";
                sql += " NDICT_IDENTIFICADOR,  NDEDICT_TIPO, CDEDICT_DETALLE ) ";
                sql += " VALUES (SEQ_DICTAMENCONTENIDO.NEXTVAL,?,?,?)";
                PreparedStatement ps = conn.prepareStatement(sql);
                //ps.setInt(2,dictamen.getNdedict_identificador());
                ps.setInt(1,dictamen.getNdict_identificador());
                ps.setInt(2,dictamen.getNdedict_tipo());
                ps.setString(3, dictamen.getCdedict_detalle());
                ps.executeUpdate();
                resultado = true;
            }else{
                System.out.println("ACTUALZIADO DETALLE DICTAMEN");
                String sql = "UPDATE SISDE_DICTAMENDET set  ";
                sql += " CDEDICT_DETALLE =? where  NDEDICT_IDENTIFICADOR = ? ";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1, dictamen.getCdedict_detalle());
                ps.setInt(2,dictamen.getNdedict_identificador());
                ps.executeUpdate();
                resultado = true;
            }
            
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }
}

